package com.tianqicode.spring.beans.factory.config;

import com.tianqicode.spring.beans.BeansException;

/**
 * 工厂钩子，允许自定义修改应用程序上下文的 bean 定义，调整上下文底层 bean 工厂的 bean 属性值
 * BeanFactoryPostProcessor可以与 bean 定义交互并修改 bean 定义，但绝不能与 bean 实例交互。
 * 这样做可能会导致 bean 过早实例化、违反容器并导致意外的副作用。
 * 如果需要 bean 实例交互，请考虑实现BeanPostProcessor
 */
public interface BeanFactoryPostProcessor {
    /**
     * 在所有的 BeanDefinition 加载完成后，实例化 Bean 对象之前，提供修改 BeanDefinition 属性的机制
     *
     * @param beanFactory
     * @throws BeansException
     */
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
